import {createTaskQueue} from '../Misc'

/**
 * 任务队列
 */
const taskQueue = createTaskQueue()
/**
 * 要执行的子任务
 */

let subTask = null

const reconcileChildren = (fiber, children) => {
    console.log(fiber, children)
    fiber.aaaa=2
}

const executeTask = fiber => {
    console.log(fiber)
    reconcileChildren(fiber, fiber.props.children)
    console.log(fiber, '')
}   

const getFirstTask = () => {
    const task = taskQueue.pop()
    return {
        props: task.props,
        stateNode: task.dom,
        tag: "host_root",
        effects: [],
        child: null,
        alternate: task.dom.__rootFiberContainer
    }
}
const workLoop = (deadline) => {
    if (!subTask) {
        subTask = getFirstTask()
    }
    while (subTask && deadline.timeRemaining() > 1) {
        subTask = executeTask(subTask)
    }
}

const performTask = deadline => {
    /**
     * 执行任务
     */
    workLoop(deadline)
    /**
     * 判断任务是否存在
     * 判断任务队列中是否还有任务没有执行
     * 再一次告诉浏览器在空闲的时间执行任务
     */
    if (subTask || !taskQueue.isEmpty()) {
        requestIdleCallback(performTask)
    }
}

export const render = (element, dom) => {
    /**
   * 1. 向任务队列中添加任务
   * 2. 指定在浏览器空闲时执行任务
   */
  /**
   * 任务就是通过 vdom 对象 构建 fiber 对象
   */
  
  taskQueue.push({
    dom,
    props: { children: element }
  })
  /**
   * 指定在浏览器空闲的时间去执行任务
   */
  requestIdleCallback(performTask)
}